package com.hotai.wenjian;


import com.aliyun.oss.OSSClient;
import com.hotai.comment.dtos.ResponseResult;
import com.hotai.comment.enums.AppHttpCodeEnum;
import com.hotai.comment.fastDFS.AliyunConfig;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.MultipartConfigElement;
import java.io.ByteArrayInputStream;
import java.io.IOException;

public class UpdataImg {


    private static final String[] IMAGE_TYPE = new String[]{".bmp", ".jpg", ".jpeg", ".gif", ".png"};

    private static final String[] IMAGE_TYP = new String[]{".apk"};


    @Autowired
    private OSSClient ossClient;

    @Autowired
    private AliyunConfig aliyunConfig;

    public ResponseResult CourseImg(MultipartFile file) {
        // 1. 对上传的图片进行校验: 这里简单校验后缀名
        // 另外可通过ImageIO读取图片的长宽来判断是否是图片,校验图片的大小等。
        if (file.getSize()>=multipartConfigElement().getMaxFileSize()){
            return ResponseResult.okResult(508,"图片大于2MB");
        }


        // TODO 图片校验
        boolean isLegal = false;
        for (String type : IMAGE_TYPE) {
            if (StringUtils.endsWithIgnoreCase(file.getOriginalFilename(), type)) {
                isLegal = true;
                break;  // 只要与允许上传格式其中一个匹配就可以
            }
        }
        ResponseResult picUploadResult = new ResponseResult();
        // 格式错误, 返回与前端约定的error
        if (!isLegal) {
            picUploadResult.errorResult(AppHttpCodeEnum.PARAM_IMAGE_FORMAT_ERROR,AppHttpCodeEnum.PARAM_IMAGE_FORMAT_ERROR.getErrorMessage());
            return picUploadResult;
        }

        // 2. 准备上传API的参数
        String fileName = file.getOriginalFilename();
        String filePath = this.getFilePath(fileName);

        // 3. 上传至阿里OSS
        try {
            ossClient.putObject(aliyunConfig.getBucketName(), filePath, new ByteArrayInputStream(file.getBytes()));
        } catch (IOException e) {
            e.printStackTrace();
            // 上传失败
            picUploadResult.errorResult(AppHttpCodeEnum.SERVER_ERROR,AppHttpCodeEnum.SERVER_ERROR.getErrorMessage());
            return picUploadResult;
        }

        // 上传成功
        picUploadResult.errorResult(AppHttpCodeEnum.SUCCESS,AppHttpCodeEnum.SUCCESS.getErrorMessage());
        // 文件名(即直接访问的完整路径)
        picUploadResult.ok(aliyunConfig.getUrlPrefix() + filePath);
        // uid
//        picUploadResult.ok(String.valueOf(System.currentTimeMillis()));
        return picUploadResult;
    }


    public ResponseResult Coursewarejian(MultipartFile file) {
        // 1. 对上传的图片进行校验: 这里简单校验后缀名
        // 另外可通过ImageIO读取图片的长宽来判断是否是图片,校验图片的大小等。

        // TODO 图片校验
        boolean isLegal = false;
        for (String type : IMAGE_TYP) {
            if (StringUtils.endsWithIgnoreCase(file.getOriginalFilename(), type)) {
                isLegal = true;
                break;  // 只要与允许上传格式其中一个匹配就可以
            }


        }
        MultipartConfigFactory factory = new MultipartConfigFactory();
        //单个文件最大
        factory.setMaxFileSize("2MB"); //KB,MB
        /// 设置总上传数据总大小
//        factory.setMaxRequestSize("1024000KB");
        MultipartConfigElement multipartConfig = factory.createMultipartConfig();

        if (file.getSize()>=multipartConfig.getMaxFileSize()){
            return ResponseResult.okResult(508,"图片大于500MB");
        }

        ResponseResult picUploadResult = new ResponseResult();
        // 格式错误, 返回与前端约定的error
        if (!isLegal) {
            picUploadResult.errorResult(AppHttpCodeEnum.PARAM_IMAGE_FORMAT_ERROR,AppHttpCodeEnum.PARAM_IMAGE_FORMAT_ERROR.getErrorMessage());
            return picUploadResult;
        }

        // 2. 准备上传API的参数
        String fileName = file.getOriginalFilename();
        String filePath = this.getFilePath(fileName);

        // 3. 上传至阿里OSS
        try {
            ossClient.putObject(aliyunConfig.getBucketName(), filePath, new ByteArrayInputStream(file.getBytes()));
        } catch (IOException e) {
            e.printStackTrace();
            // 上传失败
            picUploadResult.errorResult(AppHttpCodeEnum.SERVER_ERROR,AppHttpCodeEnum.SERVER_ERROR.getErrorMessage());
            return picUploadResult;
        }

        // 上传成功
        picUploadResult.errorResult(AppHttpCodeEnum.SUCCESS,AppHttpCodeEnum.SUCCESS.getErrorMessage());
        // 文件名(即直接访问的完整路径)
        picUploadResult.ok(aliyunConfig.getUrlPrefix() + filePath);
        return picUploadResult;
    }



    @Bean
    public MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        //单个文件最大
        factory.setMaxFileSize("2MB"); //KB,MB
        /// 设置总上传数据总大小
//        factory.setMaxRequestSize("1024000KB");
        return factory.createMultipartConfig();
    }


    /**
     * 上传的目录
     * 目录: 根据年月日归档
     * 文件名: 时间戳 + 随机数
     * @param fileName
     * @return
     */
    private String getFilePath(String fileName) {
        return "kejian/"+System.currentTimeMillis()+"."+StringUtils.substringAfterLast(fileName, ".");
    }


}
